#ifndef SINGLETON_H
#define SINGLETON_H
#include<QDebug>
#include <memory>
#include <iostream>
#include <mutex>
//单例模板

template<typename T>
class Singleton{
public:
    static std::shared_ptr<T> GetInstance(){
        static std::once_flag s_flag;
        std::call_once(s_flag, [&]{
            _instance = std::shared_ptr<T>(new T);
        });
        _instance.get();
        return _instance;
    }

    ~Singleton() {
    }
protected:
    Singleton() = default;
    //因为是单例所有禁止拷贝构造和拷贝赋值
    Singleton(const Singleton<T>&) = delete;
    Singleton& operator=(const Singleton<T>&) = delete;

    //这里的共享指针可能并不需要，因为我们是单例不需要共享指针，直接使用静态变量或者unique_ptr更合适
    //后面的网络类回调函数应该会用到
    static std::shared_ptr<T> _instance;
};

template<typename T>
std::shared_ptr<T> Singleton<T>::_instance = nullptr;

#endif // SINGLETON_H
